這題其實理解了好一陣子,假如有錯誤的地方麻煩幫我指證了
// Question:
Reverse a singly linked list.
// Example:
Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
}

// 處理極端值
// linked list 裡面沒東西
if(!head){
    return null
}
// 只有一個值所以反轉之後還是他自己
if(!head.next){
    return head;
}
主要就是反轉指標,本來是 prev 的變成 next。
 let prev = null,
    cur = head,
    temp;

temp = cur;   // 用 temp 來存目前的 node,不然會被後面的操作影響
cur = cur.next;   // 目前的 node 指標先往下
// 將 next 指向先前的值
temp.next = prev; 
// prev 變成先前的值
prev = temp;
然後一直重覆以上步驟,直到結束 (current.next == null 代表結束了)

var reverseList = function(head) {
    // 極端值
    // linked list 裡面沒東西
    if(!head){
        return null
    }
    // 只有一個值所以反轉之後還是他自己
    if(!head.next){
        return head;
    }
    let prev = null,
    cur = head,
    temp;
    
    while(cur != null){
        temp = cur;   // 用 temp 來存目前的 node,不然會被後面的操作影響
        cur = cur.next;   // 目前的 node 指標先往下
        // 將 next 指向先前的值
        temp.next = prev; 
        // prev 變成先前的值
        prev = temp;
    }
    return prev;
};
自己思考 Linked List 時的確花了更多時間來理解,不過學東西本來就這樣嘛,一開始總是辛苦,後來會發現是值得的。有邦友說 Linked List 在 React 底層有用到,雖然我們不太可能去親手打造一個 library,但懂這個資料結構在做甚麼我覺得是蠻重要的,有機會看底層的實作流程吸取大師經驗也能比較上手一些。
如有錯誤或需要改進的地方,拜託跟我說。
我會以最快速度修改,感謝您
歡迎追蹤我的部落格,除了技術文也會分享一些在矽谷工作的甘苦。